# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import json
import socket

def send_data_to_java(data):
    # Java服务器的IP地址和端口号
    JAVA_SERVER_IP = 'localhost'
    JAVA_SERVER_PORT = 8000  # 请替换为实际的Java服务器端口

    # 创建socket对象
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    try:
        # 连接到Java服务器
        sock.connect((JAVA_SERVER_IP, JAVA_SERVER_PORT))

        # 将数据转换为字节串（假设数据是字符串）
        data_bytes = data.encode('utf-8')

        # 发送数据到Java服务器
        sock.sendall(data_bytes)

        # （可选）接收Java服务器的回复（如果有的话）
        # response = sock.recv(1024).decode('utf-8')
        # print(f"Received response: {response}")

    finally:
        # 关闭socket连接
        sock.close()


# 策略中必须有init方法
def init(context):
   
   
    # 订阅浦发银行, bar频率为一天和一分钟
    # 指定数据窗口大小为50
    # 订阅订阅多个频率的数据，可多次调用subscribe
    # subscribe(symbols='SHSE.600000', frequency='1d', count=50)
    subscribe(symbols='SHSE.600000', frequency='60s',count=5,fields='open,close,high,low,frequency',format='row')


def on_bar(context, bars):
    # context.data提取缓存的数据滑窗, 可用于计算指标
    # 注意：context.data里的count要小于或者等于subscribe里的count

    data = context.data(symbol='SHSE.600000', frequency='60s', count=1)
    # print("bars",bars)
    print("data",data)


# 发送数据给Java stock
    json_string = json.dumps(data)
    send_data_to_java(json_string)

if __name__ == '__main__':
    '''
        strategy_id策略ID, 由系统生成
        filename文件名, 请与本文件名保持一致
        mode运行模式, 实时模式:MODE_LIVE回测模式:MODE_BACKTEST
        token绑定计算机的ID, 可在系统设置-密钥管理中生成
        backtest_start_time回测开始时间
        backtest_end_time回测结束时间
        backtest_adjust股票复权方式, 不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST
        backtest_initial_cash回测初始资金
        backtest_commission_ratio回测佣金比例
        backtest_slippage_ratio回测滑点比例
        backtest_match_mode市价撮合模式，以下一tick/bar开盘价撮合:0，以当前tick/bar收盘价撮合：1
        '''
    run(strategy_id='7f2ccfa3-fd2c-11ee-b13b-00ffaf12d465',
        filename='sub_bar.py',
        mode=MODE_LIVE,
        token='9f78838426fc80c2d8b9b284d1e2b78acf41234a',
        backtest_start_time='2024-04-18 08:00:00',
        backtest_end_time='2024-04-18 16:00:00',
        backtest_adjust=ADJUST_PREV,
        backtest_initial_cash=10000000,
        backtest_commission_ratio=0.0001,
        backtest_slippage_ratio=0.0001,
        backtest_match_mode=1)

